#include <stdio.h>
#include <stdlib.h>
#include "mySeqList.h"


/*顺序表的初始化，建立一个空表*/
SEQLIST *init_seqlist(){
    SEQLIST *L;
    //int *p;   
    //p=(int *)malloc(sizeof(int)); 
    L=(SEQLIST *)malloc(sizeof(SEQLIST));/*动态分配内存空间*/ 
    L->length=0;//线性表的长度为0
    return L;
}

/*在顺序表中的第i个元素之前插入新的元素x，表长加1，并返回1；不成功返回0*/ 
int insert_seqlist(SEQLIST *L,int i,datatype x)
{
    int n=L->length,k;
    if(n==MAX) 
    {
        printf("顺序表已满\n");
        return 0;
    }
    for(k=n;k>=i;k--)/*结点依次后移*/ 
        L->a[k]=L->a[k-1];
    L->a[i-1]=x;/*新元素插入*/
    L->length++; /*长度加1*/
    return 1;/*插入成功，返回1*/
    
    
}

/*删除顺序表中的第i个元素，表长减1，并返回1；不成功返回0*/ 
int delete_seqlist(SEQLIST *L,int i)
{
    int j;
    if(i<1||i>L->length){/*检查空表及删除位置的合法性*/
        printf("不存在第i个元素");
        return 0;
    }
    for(j=i;j<L->length;j++){
        L->a[j-1]=L->a[j];/*元素向前移动*/
    }
    L->length--;//表长减1
    return 1;//删除成功
} 

/*返回顺序表中值为x的元素的序号，若无，返回0 */
int location_seqlist(SEQLIST *L,datatype x){
    int i=0;
    while(i<L->length&&L->a[i]!=x){
        i++;//依次查询 
    }    
    if(i==L->length){       
        return 0;//查找不成功 
    }else{
        return i+1;//查找成功，返回存储的位置 
    }    
}

/* 返回顺序表中第i个元素的值，若i大于表长，返回0 */
int get_seqlist(SEQLIST *L,int i){
    if(i<1||i>L->length){
        //printf("没有第i个元素");
        return 0; 
    }else{
        return L->a[i-1];
    }
} 

//输出顺序表
void print_seqlist(SEQLIST *L){
    int j;
    if(L->length==0){
        printf("这是一个空表");
    }else{
        printf("顺序表的元素为：");
        for(j=0;j<L->length;j++){
            printf("%4d",L->a[j]);
        }        
    }
    printf("\n");
}
